home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2001 May / SGI Freeware 2001 May - Disc 2.iso / dist / fw_cdlabelgen.idb / usr / freeware / share / cdlabelgen / template.ps.z / template.ps
Text File  |  1999-10-18  |  19KB  |  613 lines

  1. %!PS-Adobe-1.0 
  2. %%
  3. %% This document automatically generated by cdlabelgen
  4. %%
  5. %% Copyright (C) 1998 B. W. Fitzpatrick <fitz@red-bean.com>
  6. %% 
  7. %% Author: B. W. Fitzpatrick <fitz@red-bean.com>
  8. %% Maintainer: B. W. Fitzpatrick <fitz@red-bean.com>
  9. %% Created: October, 1998
  10. %% Keywords: postscript, labels
  11. %%
  12. %% $Id: template.ps,v 1.29 1999/06/21 19:35:16 bwf Exp $
  13. %% 
  14. %% This program is free software; you can redistribute it and/or modify
  15. %% it under the terms of the GNU General Public License as published by
  16. %% the Free Software Foundation; either version 2, or (at your option)
  17. %% any later version.
  18. %%
  19. %% This program is distributed in the hope that it will be useful,
  20. %% but WITHOUT ANY WARRANTY; without even the implied warranty of
  21. %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  22. %% GNU General Public License for more details.
  23. %%
  24. %% You should have received a copy of the GNU General Public License
  25. %% along with this program; if not, you can either send email to this
  26. %% program's maintainer or write to: The Free Software Foundation,
  27. %% Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA.
  28.  
  29. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
  30. %% Reencode the font to support international characters.
  31. %% This taken directly from GNUPlot 3.7 /term/next.trm
  32. %% Submitted to me by Jens Clau▀en claussen@db.fmi.uni-passau.de
  33.  
  34. /reencodeISO {
  35.   dup dup findfont dup length dict begin
  36.      { 1 index /FID ne { def }{ pop pop } ifelse } forall
  37.      /Encoding ISOLatin1Encoding def
  38.      currentdict end definefont
  39. } def
  40.      
  41. /ISOLatin1Encoding [ 
  42. /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef 
  43. /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef 
  44. /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef 
  45. /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef 
  46. /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright 
  47. /parenleft/parenright/asterisk/plus/comma/minus/period/slash 
  48. /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon 
  49. /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N 
  50. /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright 
  51. /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m 
  52. /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 
  53. /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef 
  54. /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef 
  55. /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve 
  56. /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut 
  57. /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar 
  58. /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot 
  59. /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior 
  60. /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine 
  61. /guillemotright/onequarter/onehalf/threequarters/questiondown 
  62. /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla 
  63. /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex 
  64. /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis 
  65. /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute 
  66. /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis 
  67. /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave 
  68. /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex 
  69. /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis 
  70. /yacute/thorn/ydieresis 
  71. ] def 
  72. /Helvetica reencodeISO def 
  73. /Helvetica-Bold reencodeISO def 
  74.      
  75. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
  76. %% Font related stuff
  77. /banfont /Helvetica-Bold def
  78. /cover_ban_size 42 def
  79. /tray_ban_size 42 def
  80. /bansize 42 def
  81.  
  82. /subbanfont /Helvetica-Bold def
  83. /cover_subban_size 24 def
  84. /tray_subban_size 24 def
  85. /subbansize 24 def
  86.  
  87. /notefontname /Helvetica-Bold def
  88. /notefontsize 12 def
  89.  
  90. /normalfontname /Helvetica def
  91. /normalfontsize 10 def
  92. /max_item_height 12 def
  93.  
  94. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  95. %% Constants
  96. /print_traycard_plaque_p TOKEN_PLAQUE_P def
  97.  
  98. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  99. %% Dimensions
  100. /in {72 mul } def 
  101.  
  102. /tng_width .375 in def            % Width of the tongue   
  103. /cap_width .25 in def            % Width of the endcap   
  104. /tray_height 4.625 in def            % Height of the traycard
  105. /tray_width { 5.406 in } def  % Width of the traycard 
  106. /tray_width_printable { tray_width .15 in sub } def
  107. /cover_height { 4.72 in } def % Height of the cover
  108. /cover_width { 4.75 in } def    % Width of the cover
  109. /cover_width_printable { cover_width .15 in sub } def    
  110.  
  111. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  112. %% Begin Procedures
  113.  
  114. %% Auto scale the font to deal with strings that might be too long
  115. %% Push onto the stack: font, pt size, string, max_width, 
  116. %% and we'll set the font to the right size so it isn't too wide.
  117. /auto_scale_font {
  118.   % load up the vars from the stack into local vars.
  119.   /max_width exch 20 sub def
  120.   /the_string exch def
  121.   /pt_size exch def
  122.   /font_to_scale exch def
  123.   
  124.   % Set the font that we're going to use
  125.   font_to_scale findfont [ pt_size 0 0 pt_size 0 0 ] makefont setfont
  126.   
  127.   % Get the width of the string
  128.   /width_string {the_string stringwidth pop} def
  129.   /width_scale 1 def   % set to 1 for width computation.
  130.   
  131.   % If our string is wider than max width, get our scale ratio
  132.   width_string max_width gt
  133.   { /width_scale {max_width width_string div} def}
  134.   if
  135.   % leave the new point size on the stack
  136.   pt_size width_scale mul
  137. } def
  138.  
  139. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  140. %% Strings
  141. /ban_string {
  142.   (TOKEN_BAN_STRING) 
  143. } def
  144. /ban_string_padded { % pads some space onto the string we're going to use for the endcaps
  145. % I wanted to derive this from the above string, but I couldn't get
  146. % copy or putinterval to work right for me. Anyone who can help?
  147.   (TOKEN_BAN_STRING   ) 
  148. } def
  149. /subban_string { 
  150.   (TOKEN_SUBBAN_STRING)
  151. } def
  152. /date_today { 
  153.   (TOKEN_DATE) 
  154. } def
  155.  
  156. %% Font Procedures
  157.  
  158. %% Cover
  159. /cover_ban_font { banfont findfont
  160.   banfont bansize ban_string cover_width_printable auto_scale_font 
  161.   scalefont setfont} def 
  162. banfont bansize ban_string cover_width_printable auto_scale_font 
  163. /cover_ban_size exch def
  164.  
  165. /cover_subban_font { subbanfont findfont 
  166.   subbanfont subbansize subban_string cover_width_printable auto_scale_font 
  167.   scalefont setfont} def 
  168. subbanfont subbansize subban_string cover_width_printable auto_scale_font 
  169. /cover_subban_size exch def
  170. %% Tray
  171. /tray_ban_font { banfont findfont
  172.   banfont bansize ban_string tray_width_printable auto_scale_font 
  173.   scalefont setfont} def 
  174.   banfont bansize ban_string tray_width_printable auto_scale_font 
  175. /tray_ban_size exch def
  176.  
  177. /tray_subban_font { subbanfont findfont
  178.   subbanfont subbansize subban_string tray_width_printable auto_scale_font 
  179.   scalefont setfont} def 
  180.   subbanfont subbansize subban_string tray_width_printable auto_scale_font 
  181. /tray_subban_size exch def
  182.  
  183. %% Endcaps
  184. /notefont { notefontname findfont notefontsize scalefont setfont} def 
  185. /date_width {
  186.   notefont date_today stringwidth pop 
  187. } def
  188. /cap_notefont {notefontname findfont
  189.   notefontname notefontsize ban_string_padded tray_height date_width sub auto_scale_font 
  190.   scalefont setfont} def
  191.  
  192. /normalfont { normalfontname findfont normalfontsize scalefont setfont} def 
  193.  
  194. /items [
  195. TOKEN_ITEMS
  196. ] def
  197.  
  198. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  199.  
  200. %% Determine how wide we want to make the plaque
  201. /cover_plaque_width {
  202.   gsave
  203.      cover_ban_font
  204.      ban_string stringwidth pop  
  205.      cover_subban_font
  206.      subban_string stringwidth pop gt
  207.      { cover_ban_font ban_string stringwidth pop}
  208.      { cover_subban_font subban_string stringwidth pop}
  209.      ifelse
  210.      (  ) stringwidth pop 2 sub add % add a little breathing room
  211.   grestore
  212. } def
  213.  
  214. /cover_plaque_height {
  215.   cover_ban_size cover_subban_size add 
  216.  cover_ban_size 8 div cover_subban_size 6 div 2 mul add add
  217. %9  cover_ban_size 8 div cover_subban_size 8 div 2 mul add add
  218. } def
  219.  
  220. /tray_plaque_width {
  221.   gsave
  222.      tray_ban_font
  223.      ban_string stringwidth pop  
  224.      tray_subban_font
  225.      subban_string stringwidth pop gt
  226.      { tray_ban_font ban_string stringwidth pop}
  227.      { tray_subban_font subban_string stringwidth pop}
  228.      ifelse
  229.      (  ) stringwidth pop 2 sub add % add a little breathing room
  230.   grestore
  231. } def
  232.  
  233. /tray_plaque_height {
  234.   tray_ban_size tray_subban_size add 
  235.   tray_ban_size 8 div tray_subban_size 8 div 2 mul add add
  236. } def
  237.  
  238. %% This is for dealing with epsfiles that do a showpage
  239. /BEGINEPSFILE { 
  240.   /EPSFsave save def
  241.   0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash
  242.   newpath
  243.   /showpage {} def
  244.   } bind def
  245.  
  246. %% This is for dealing with epsfiles that do a showpage
  247. /ENDEPSFILE { 
  248.   EPSFsave restore
  249.   } bind def
  250.  
  251. /box { % stack: width and height
  252.   /height exch def
  253.   /width exch def
  254.   0 setlinecap
  255.   0 setlinewidth
  256.  
  257.   width 0 rlineto 
  258.   0 height rlineto
  259.   width neg 0 rlineto
  260.   0 height neg rlineto
  261.   closepath
  262.   gsave
  263.      stroke
  264.   grestore
  265. } def
  266.  
  267. %% Spacers
  268. /desc 5 def
  269. /notespacer { desc dup rmoveto } def 
  270.  
  271. %% Centers something inside something else. Put a string obj and a width onto the stack first
  272. /centerstring {
  273. exch dup stringwidth pop 3 -1 roll exch sub 2 div 0 rmoveto show
  274. } def
  275.  
  276. /centerobject { %stack: width within with which to center, objwidth 
  277.   sub 2 div 0 rmoveto 
  278. } def
  279.  
  280. %TODO dump this
  281. /shownormalandrepos { show_at 0 normalfontsize neg rmoveto } def
  282.  
  283. %% show a string without moving (or so they think!)
  284. /show_at {
  285.   dup show stringwidth pop neg 0 rmoveto
  286. } def
  287.  
  288. %% This prints the text in the endcaps
  289. /make_endcap {
  290.   gsave
  291.      gsave
  292.         cap_notefont notespacer ban_string_padded dup show stringwidth pop 
  293.      grestore
  294.      % If our ban_string_padded + subban_string is wider than the width
  295.      %of the endcap minus the width of the date, then don't print the subban_string
  296.      % width available to us
  297.      tray_height date_today stringwidth pop sub 
  298.      % length of the two strings (don't use the padded string!)
  299.      cap_notefont ban_string stringwidth pop subban_string stringwidth pop add gt
  300.      { 0 rmoveto
  301.         normalfont 
  302.         0 desc rmoveto subban_string show }
  303.      if
  304.   grestore
  305.   cap_notefont date_today dup stringwidth pop tray_height exch sub desc sub desc rmoveto show  
  306. } def 
  307.  
  308. %% For the plaque
  309. /plaquepath {
  310.   plaquewidth       0           rlineto
  311.   0         plaqueheight        rlineto
  312.   plaquewidth neg 0            rlineto
  313.   0         plaqueheight neg    rlineto
  314.   closepath
  315. } def
  316.  
  317. %% Draw a nice plaque with a small shadow
  318. %% --Based on a ps-print proc from emacs
  319. /plaque { % Stack: width and height
  320.   gsave
  321.      /plaqueheight exch def
  322.      /plaquewidth exch def
  323.     0.4 setlinewidth
  324.     % ---- fill a black rectangle (the shadow of the next one)
  325.      gsave
  326.         2 -2 rmoveto
  327.         plaquepath
  328.         gsave 0 setgray fill grestore
  329.         % ---- do the next rectangle ...
  330.      grestore
  331.      plaquepath
  332.      closepath
  333.     gsave 0.9 setgray fill grestore    % filled with grey
  334.     gsave 0 setgray stroke grestore    % drawn  with black
  335.   grestore
  336. } def
  337.  
  338. %% End Procedures
  339. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  340. %% First endcap
  341. /first_endcap {
  342.   gsave
  343.      newpath
  344.      0 0 moveto 
  345.      cap_width tray_height box
  346.      cap_width 0 moveto
  347.      90 rotate 
  348.      make_endcap  
  349.   grestore
  350. } def
  351. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  352. %% Back of the jewel box
  353. /tray_card {
  354.   gsave
  355.     
  356.     % Draw the box
  357.     newpath
  358.     cap_width 0 moveto
  359.     gsave
  360.       tray_width tray_height box
  361.     grestore
  362.       newpath
  363.       % Move to the upper left corner of the tray_card
  364.       cap_width tray_height 5 sub moveto
  365.     
  366.     % Put this in a conditional so that we can optionally *not* print
  367.     % the plaque on the traycard.
  368.     print_traycard_plaque_p 0 gt
  369.     { 
  370.       gsave
  371.         % move down and start the box at the bottom of the text
  372.         0 tray_plaque_height neg rmoveto
  373.         % Center, then make the plaque 
  374.         tray_width tray_plaque_width centerobject 
  375.         tray_plaque_width tray_plaque_height plaque
  376.       grestore
  377.       gsave
  378.         % center and print the title
  379.         0 tray_ban_size neg rmoveto 
  380.         gsave 
  381.           tray_ban_font ban_string tray_width centerstring
  382.         grestore   
  383.         % then subtitle
  384.         0 cover_subban_size cover_ban_size 8 div add neg rmoveto 
  385.         tray_subban_font subban_string width centerstring
  386.       grestore   
  387.       % Move down to a suitable position for printing the listing
  388.       0 tray_plaque_height 15 add neg rmoveto 
  389.     }
  390.     if 
  391.  
  392.     % else
  393.     print_traycard_plaque_p 1 lt
  394.     { 0 8 neg rmoveto }
  395.     if
  396.      % Indent
  397.      8 0 rmoveto 
  398.      % Get the height of our printable space for the items
  399.      /col_height currentpoint exch pop def 
  400. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  401. %% TODO It would probably be better to truncate or wrap long lines instead of scaling them.
  402.      gsave
  403.         % 0 - 22 items
  404.         /num_cols 1 def
  405.         % 23 - 54 items
  406.         items length 23 gt { /num_cols 2 def } if
  407.         % 55 - 110 items
  408.         items length 55 gt { /num_cols 3 def } if
  409.         % 110 and up
  410.         items length 110 gt { /num_cols 4 def } if
  411.         % 192 seems like a good max number of items for the back
  412.         /how_many_items items length def
  413.         how_many_items 192 gt { 
  414.  
  415.         % If we're printing the plaque, then we do 192
  416.         print_traycard_plaque_p 0 gt
  417.         { /how_many_items 192 def } if
  418.         
  419.         % else we do 256
  420.         print_traycard_plaque_p 1 lt
  421.         { /how_many_items 256 def } if
  422.  
  423.       } if 
  424.         % figure out our font size by dividing the total printable height by
  425.         % the number of items
  426.         /line_height col_height num_cols mul how_many_items div def 
  427.         /item_size line_height 1 add def
  428.         % Don't go bigger than 14 pts tho...
  429.         line_height max_item_height gt {
  430.           /line_height max_item_height def
  431.           /item_size max_item_height def
  432.         } if
  433.         % set our font 
  434.         /itemsfont 
  435.         { normalfontname findfont item_size scalefont setfont} def 
  436.         itemsfont
  437.         % Print the items
  438.         items { 
  439.           dup
  440.           /item_string exch def
  441.           /col_width tray_width num_cols div def
  442.           % Scale down if the item is wider than the column.
  443.           /itemsfont { normalfontname findfont
  444.              normalfontname item_size item_string col_width 8 add auto_scale_font 
  445.              scalefont setfont} def
  446.           itemsfont
  447.           % And show the text 
  448.            show_at 0 line_height neg rmoveto     
  449.           % Set the font back to normal size
  450.            /itemsfont 
  451.            { normalfontname findfont item_size scalefont setfont} def 
  452.           % If we get to the bottom, move up and over!
  453.           4 currentpoint exch pop gt
  454.           {
  455.           grestore
  456.              tray_width num_cols div 0 rmoveto
  457.              gsave
  458.                 % If we move past the right edge of the tray_card, 
  459.                 % then it's time to stop printing items.
  460.                 currentpoint pop tray_width gt
  461.                 {exit} if 
  462.                 itemsfont} if
  463.         } forall
  464.              grestore
  465. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  466.   grestore   
  467. } def
  468. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  469. % Second endcap
  470. /second_endcap {
  471.   cap_width tray_width add 0 moveto
  472.   cap_width tray_height box
  473.   
  474.   gsave
  475.      % Position ourselves to write in the endcap
  476.      tray_width cap_width add tray_height moveto
  477.      270 rotate 
  478.      make_endcap  
  479.   grestore
  480. } def
  481. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  482. % Tongue endcap
  483. /tongue_endcap {
  484.   cap_width tray_width add cap_width add 0 moveto
  485.   tng_width tray_height box
  486.   
  487.   gsave
  488.      % Position ourselves to write in the endcap
  489.      % Same as second endcap
  490.      % tng_width cap_width sub 2 div tray_width cap_width add cap_width add add tray_height moveto
  491.      % 270 rotate 
  492.      % Same as first endcap
  493.      tng_width cap_width sub 2 div tray_width cap_width 3 mul add add 0 moveto
  494.      90 rotate 
  495.      make_endcap  
  496.   grestore
  497. } def
  498. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  499. %cover
  500. /cover {
  501.   newpath
  502.   0 cover_height 25 add moveto
  503.   gsave 
  504.      cover_width cover_height box 
  505.   grestore
  506.   gsave
  507.      0 cover_height 5 sub rmoveto
  508.      gsave
  509.         % move down and start the box at the bottom of the text
  510.         0 cover_plaque_height neg rmoveto
  511.         cover_width cover_plaque_width centerobject 
  512.         cover_plaque_width cover_plaque_height plaque
  513.      grestore
  514.      % center and print the title, then subtitle
  515.      0 cover_ban_size 
  516.      neg rmoveto 
  517.      gsave 
  518.         cover_ban_font ban_string cover_width centerstring
  519.      grestore   
  520.      0 cover_subban_size cover_ban_size 8 div add neg rmoveto 
  521.      cover_subban_font subban_string cover_width centerstring
  522.   grestore
  523.   % We're now back in the bottom left corner of the cover
  524.   % relocate to an appropriate place to put the date on the cover
  525.   notefont
  526.   cover_width date_today stringwidth pop sub 10 sub      % X
  527.   cover_height tray_plaque_height 20 add sub rmoveto     % Y
  528.   date_today show
  529. } def
  530.      
  531. gsave
  532. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  533. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  534. %% And off we go
  535. %% Position ourselves in a reasonable place
  536.      .5 in .5 in translate
  537.  
  538.      first_endcap
  539.      tray_card
  540.      second_endcap
  541.      tongue_endcap
  542.      cover
  543.  
  544. TOKEN_EPS_BOUNDS
  545.  
  546. gsave
  547. BEGINEPSFILE
  548. %move it to where we want to go.
  549. cover_width bound2x bound1x sub scaleratio mul 7 add sub 
  550. tray_height 25 15 add add 
  551. translate
  552. %adjust origin of epsfile to be 0 0
  553. % we can automatically account for symmetrical scaling
  554. bound1x scaleratio mul neg bound1y scaleratio mul neg translate
  555. scaleratio dup scale
  556. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  557.  
  558. TOKEN_COVER_EPS
  559.  
  560. ENDEPSFILE
  561. %grestore
  562. % Graphic on the tray_card
  563. BEGINEPSFILE
  564.  
  565. grestore
  566.  
  567. gsave
  568.   
  569. TOKEN_TRAY_CARD_BOUNDS
  570.   
  571.   %move it to where we want to go.
  572.   tray_width cap_width add bound2x bound1x sub scaleratio mul 7 add sub 
  573.   5
  574.   translate
  575.   %adjust origin of epsfile to be 0 0
  576.   % we can automatically account for symmetrical scaling
  577.   bound1x scaleratio mul neg bound1y scaleratio mul neg translate
  578.   scaleratio dup scale
  579.   
  580. TOKEN_TRAY_CARD_EPS
  581.  
  582. ENDEPSFILE
  583.  
  584. grestore   
  585.  
  586. % Use up a little of the whitespace on the scrap part of the paper
  587. normalfontname findfont normalfontsize scalefont setfont
  588. 0 0 moveto tray_width cap_width 4 mul add tray_height 25 add moveto
  589. 90 rotate
  590.  
  591. gsave 
  592.   (cdlabelgen, version 1.5.0, ) show
  593.   /Symbol findfont 12 scalefont setfont (\343) show
  594.   normalfontname findfont normalfontsize scalefont setfont
  595.   ( 1998, 1999 B. W. Fitzpatrick <fitz@red-bean.com>) show
  596. grestore
  597.  
  598. 0 18 neg rmoveto
  599. normalfontname findfont 8 scalefont setfont
  600.  
  601. gsave 
  602.   (The latest version of cdlabelgen is available at ) show
  603.   (http://www.red-bean.com/~bwf/software/cdlabelgen/) show
  604. grestore
  605. 0 10 neg rmoveto
  606. (This version last updated 1999-06-22. ) show
  607. (Contains a substantial amount of non-tobacco ingredients.) show
  608.  
  609. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  610.  
  611. showpage
  612.  
  613.